/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package test;

import dmtools.PC;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Element;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 *
 * @author bbritt
 */
public class DND4EReader{

    public void readXML(String fileName, PC c) {
        try {
            File file = new File(fileName);
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(file);
            NodeList nodeLst, fstElemList;
            Node fstNode, fstElemNode;
            Element fstElem, fstElemNodeElem;

            // Get the Character Name from the Details
            nodeLst = doc.getElementsByTagName("Details");
            fstNode = nodeLst.item(0);
            fstElem = (Element) fstNode;
            fstElemList = fstElem.getChildNodes();

            for (int s = 0; s < fstElemList.getLength(); s++) {
                fstElemNode = fstElemList.item(s);
                if (fstElemNode.getNodeName().compareTo("name") == 0) {
                    System.out.println("Name: " + fstElemNode.getTextContent());
                    c.setCharacterName(fstElemNode.getTextContent());
                }
                if (fstElemNode.getNodeName().compareTo("Player") == 0) {
                    System.out.println("Player: " + fstElemNode.getTextContent());
                    c.setPlayerName(fstElemNode.getTextContent());
                }
            }

            nodeLst = doc.getElementsByTagName("StatBlock");
            fstNode = nodeLst.item(0);
            fstElem = (Element) fstNode;
            fstElemList = fstElem.getChildNodes();

            for (int s = 0; s < fstElemList.getLength(); s++) {
                fstElemNode = fstElemList.item(s);
                if (fstElemNode.getNodeType() == Node.ELEMENT_NODE) {
                    fstElemNodeElem = (Element) fstElemNode;

                    // Statistics
                    if (fstElemNodeElem.getAttribute("name").compareTo("Strength") == 0) {
                        System.out.println("Strength: " + fstElemNodeElem.getAttribute("value"));
                        c.setStr(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Constitution") == 0) {
                        System.out.println("Constitution: " + fstElemNodeElem.getAttribute("value"));
                        c.setCon(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Dexterity") == 0) {
                        System.out.println("Dexterity: " + fstElemNodeElem.getAttribute("value"));
                        c.setDex(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Intelligence") == 0) {
                        System.out.println("Intelligence: " + fstElemNodeElem.getAttribute("value"));
                        c.setInt(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Wisdom") == 0) {
                        System.out.println("Wisdom: " + fstElemNodeElem.getAttribute("value"));
                        c.setWis(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Charisma") == 0) {
                        System.out.println("Charisma: " + fstElemNodeElem.getAttribute("value"));
                        c.setCha(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }

                    // Stat Modifiers
                    if (fstElemNodeElem.getAttribute("name").compareTo("Strength modifier") == 0) {
                        System.out.println("Strength Modifier: " + fstElemNodeElem.getAttribute("value"));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Constitution modifier") == 0) {
                        System.out.println("Constitution Modifier: " + fstElemNodeElem.getAttribute("value"));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Dexterity modifier") == 0) {
                        System.out.println("Dexterity Modifier: " + fstElemNodeElem.getAttribute("value"));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Intelligence modifier") == 0) {
                        System.out.println("Intelligence Modifier: " + fstElemNodeElem.getAttribute("value"));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Wisdom modifier") == 0) {
                        System.out.println("Wisdom Modifier: " + fstElemNodeElem.getAttribute("value"));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Charisma modifier") == 0) {
                        System.out.println("Charisma Modifier: " + fstElemNodeElem.getAttribute("value"));
                    }

                    // Defenses
                    if (fstElemNodeElem.getAttribute("name").compareTo("AC") == 0) {
                        System.out.println("Armor Class: " + fstElemNodeElem.getAttribute("value"));
                        c.setAC(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Fortitude Defense") == 0) {
                        System.out.println("Fortitude Defense: " + fstElemNodeElem.getAttribute("value"));
                        c.setFortDefense(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Reflex Defense") == 0) {
                        System.out.println("Reflex Defense: " + fstElemNodeElem.getAttribute("value"));
                        c.setRefDefense(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Will Defense") == 0) {
                        System.out.println("Will Defense: " + fstElemNodeElem.getAttribute("value"));
                        c.setWillDefense(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }

                    // Level
                    if (fstElemNodeElem.getAttribute("name").compareTo("Level") == 0) {
                        System.out.println("Level: " + fstElemNodeElem.getAttribute("value"));
                        c.setLevel(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }

                    // HP
                    if (fstElemNodeElem.getAttribute("name").compareTo("Hit Points") == 0) {
                        System.out.println("Hit Points: " + fstElemNodeElem.getAttribute("value"));
                        c.setMaxHP(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Healing Surges") == 0) {
                        System.out.println("Healing Surges: " + fstElemNodeElem.getAttribute("value"));
                        c.setHealingSurge(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }

                    // Initiative
                    if (fstElemNodeElem.getAttribute("name").compareTo("Initiative") == 0) {
                        System.out.println("Initiative: " + fstElemNodeElem.getAttribute("value"));
                        c.setInitiative(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }

                    // Skills
                    if (fstElemNodeElem.getAttribute("name").compareTo("Acrobatics") == 0) {
                        System.out.println("Acrobatics: " + fstElemNodeElem.getAttribute("value"));
                        c.setAcrobatics(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Arcana") == 0) {
                        System.out.println("Arcana: " + fstElemNodeElem.getAttribute("value"));
                        c.setArcana(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Athletics") == 0) {
                        System.out.println("Athletics: " + fstElemNodeElem.getAttribute("value"));
                        c.setAthletics(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Bluff") == 0) {
                        System.out.println("Bluff: " + fstElemNodeElem.getAttribute("value"));
                        c.setBluff(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Diplomacy") == 0) {
                        System.out.println("Diplomacy: " + fstElemNodeElem.getAttribute("value"));
                        c.setDiplomacy(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Dungeoneering") == 0) {
                        System.out.println("Dungeoneering: " + fstElemNodeElem.getAttribute("value"));
                        c.setDungeoneering(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Endurance") == 0) {
                        System.out.println("Endurance: " + fstElemNodeElem.getAttribute("value"));
                        c.setEndurance(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Heal") == 0) {
                        System.out.println("Heal: " + fstElemNodeElem.getAttribute("value"));
                        c.setHeal(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("History") == 0) {
                        System.out.println("History: " + fstElemNodeElem.getAttribute("value"));
                        c.setHistory(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Insight") == 0) {
                        System.out.println("Insight: " + fstElemNodeElem.getAttribute("value"));
                        c.setInsight(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Intimidate") == 0) {
                        System.out.println("Intimidate: " + fstElemNodeElem.getAttribute("value"));
                        c.setIntimidate(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Nature") == 0) {
                        System.out.println("Nature: " + fstElemNodeElem.getAttribute("value"));
                        c.setNature(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Perception") == 0) {
                        System.out.println("Perception: " + fstElemNodeElem.getAttribute("value"));
                        c.setPerception(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Religion") == 0) {
                        System.out.println("Religion: " + fstElemNodeElem.getAttribute("value"));
                        c.setReligion(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Stealth") == 0) {
                        System.out.println("Stealth: " + fstElemNodeElem.getAttribute("value"));
                        c.setStealth(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Streetwise") == 0) {
                        System.out.println("Streetwise: " + fstElemNodeElem.getAttribute("value"));
                        c.setStreetwise(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Theivery") == 0) {
                        System.out.println("Theivery: " + fstElemNodeElem.getAttribute("value"));
                        c.setTheivery(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }

                    // Passive checks
                    if (fstElemNodeElem.getAttribute("name").compareTo("Passive Perception") == 0) {
                        System.out.println("Passive Perception: " + fstElemNodeElem.getAttribute("value"));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Passive Insight") == 0) {
                        System.out.println("Passive Insight: " + fstElemNodeElem.getAttribute("value"));
                    }
                    if (fstElemNodeElem.getAttribute("name").compareTo("Speed") == 0) {
                        System.out.println("Speed: " + fstElemNodeElem.getAttribute("value"));
                        c.setSpeed(Integer.parseInt(fstElemNodeElem.getAttribute("value")));
                    }

                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
